package sliding_window

import "fmt"

/*

如果一个字符串不含有任何重复字符，我们称这个字符串为 好 字符串。
给你一个字符串 s，请你返回 s中长度为 3 的 好子字符串 的数量。
注意，如果相同的好子字符串出现多次，每一次都应该被记入答案之中。

子字符串 是一个字符串中连续的字符序列。

示例 1：
输入：s = "xyzzaz"
输出：1
解释：总共有 4 个长度为 3 的子字符串："xyz"，"yzz"，"zza" 和 "zaz" 。
唯一的长度为 3 的好子字符串是 "xyz"。

示例 2：
输入：s = "aababcabc"
输出：4
解释：总共有 7 个长度为 3 的子字符串："aab"，"aba"，"bab"，"abc"，"bca"，"cab" 和 "abc" 。
好子字符串包括 "abc"，"bca"，"cab" 和 "abc" 。
*/

//滑动窗口
func countGoodSubstrings(s string) int {
	//左右指针与结果变量
	left, right, cnt := 0, 0, 0
	for right < len(s) {
		//首先扩大窗口
		right++

		//缩小窗口
		for right-left >= 3 {
			if right-left == 3 {
				//不含有重复的元素
				if s[left] != s[left+1] && s[left] != s[left+2] && s[left+1] != s[left+2] {
					fmt.Println("输出结果:", s[left:right])
					cnt++
				}
			}
			left++
		}

	}
	return cnt
}

//暴力解法
func countGoodSubstrings1(s string) int {
	res, l := 0, len(s)
	for i := 0; i < l-2; i++ {
		if s[i] != s[i+1] && s[i] != s[i+2] && s[i+1] != s[i+2] {
			res++
		}
	}
	return res
}
